﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Text;
using com.clinica.business.BE.acttar;
using com.clinica.business.BL.interfaces.acttar;
using com.clinica.DL.sql.acttar;
using com.clinica.business.entities;
using System.Configuration;
using com.clinica.DL.sql.acttar;
using com.clinica.DL.sql.comun;
using com.clinica.business.BE.comun;
using System.Xml;
/****************************************************************************************
 * Sistema    : Sistema de Gestión de Clinica
 * Modulo     : Facturación y Presupuestos
 * Descripción: 
 * Autor      : JPEREZ
 * Fecha      : 2011-06-01
 ****************************************************************************************/

namespace com.clinica.business.BL.acttar
{
    [ServiceBehavior(Name = "LiquidacionBL",
  Namespace = "http://com.clinica.business.BL.interfaces.acttar",
  ConcurrencyMode = ConcurrencyMode.Multiple,
  InstanceContextMode = InstanceContextMode.PerSession,
  IncludeExceptionDetailInFaults = true)]
    public class TarifarioBL : ITarifarioBL
    {
        #region ITarifarioBL Members Bandeja

        public List<TarifarioBE> ObternerTarifarios(TarifarioBE request, DateTime dtFecha_Inicio, DateTime dtFecha_Fin)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<TarifarioBE> lstReturn = new List<TarifarioBE>();
            try
            {
                lstReturn = TarifarioDL.ObtenerSolicitudTarifarios(request, dtFecha_Inicio, dtFecha_Fin);
                foreach (TarifarioBE item in lstReturn)
                {
                    if (item.Fecha != null)
                        item.FechaVista = item.Fecha.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                 FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }
        public List<com.clinica.business.BE.comun.ParametrosBE> ObternerTipoDocumento(com.clinica.business.BE.comun.ParametrosBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<ParametrosBE> lstResult = new List<ParametrosBE>();
            try
            {
                lstResult = ParametrosDL.ObtenerTabla(request);
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }

            return lstResult;
        }
        #endregion

        #region ITarifarioBL Members Mantenimiento


        public List<TarifarioBE> ObternerTarifario(TarifarioBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<TarifarioBE> lstReturn = new List<TarifarioBE>();
            try
            {
                lstReturn = TarifarioDL.ObtenerSolicitudTarifarios(request);
                foreach (TarifarioBE item in lstReturn)
                {
                    if (item.Fecha != null)
                        item.FechaVista = item.Fecha.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }

        #endregion

        #region ITarifarioBL Members User Control Tarifario


        public List<TarifarioBE> ObternerTarifarioOrigen(TarifarioBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<TarifarioBE> lstReturn = new List<TarifarioBE>();
            try
            {
                lstReturn = TarifarioDL.ObtenerTarifa(request);              
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }

        #endregion

        #region ITarifarioBL Members User Control Servicios

        public List<ServiciosBE> ObternerServicios(ServiciosBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<ServiciosBE> lstReturn = new List<ServiciosBE>();
            try
            {
                lstReturn = ServiciosDL.ObtenerServicios(request);
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }

        #endregion

        #region ITarifarioBL Members


        public int GuardarTarifario(int accion, List<TarifarioBE> request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            int Resultado = 0;
            List<TarifarioBE> lst = new List<TarifarioBE>();
            try
            {
                XmlDocument doc = new XmlDocument();
                XmlNode root = doc.CreateElement("Tarifa");
                doc.AppendChild(root);
                foreach (TarifarioBE item in request)
                {
                    #region insercion/ actualizacion en sql del Detalle
                    try
                    {
                        XmlElement newElem = doc.CreateElement("Registro");
                        #region Cabecera
                        newElem.SetAttribute("Fecha", item.Fecha.ToString("yyyyMMdd"));
                        newElem.SetAttribute("Descripcion", item.Descripcion);
                        newElem.SetAttribute("Factor", item.Factor.ToString());
                        newElem.SetAttribute("Observaciones", item.Observaciones);
                        newElem.SetAttribute("CodigoTarifario", item.CodigoTarifario.ToString());
                        newElem.SetAttribute("CodigoEstado", item.CodigoEstado.ToString());
                        #endregion
                        #region Detalle
                        newElem.SetAttribute("TipoSolicitud", item.TipoSolicitud.ToString());
                        newElem.SetAttribute("NumeroSolicitud", item.NumeroSolicitud.ToString());
                        newElem.SetAttribute("CodigoServicio", item.CodigoServicio.ToString());
                        newElem.SetAttribute("ValorCalculo", item.ValorCalculo.ToString());
                        newElem.SetAttribute("TipoCalculo", item.TipoCalculo.ToString());
                        newElem.SetAttribute("ValorDescuento", item.ValorDescuento.ToString());
                        #endregion
                        doc.DocumentElement.AppendChild(newElem);
                    }
                    catch (Exception e)
                    {
                        
                    }
                    #endregion
                }
                lst = TarifarioDL.ActualizarTarifario(accion,doc.InnerXml);
               foreach (TarifarioBE item in lst)
                {
                    Resultado = item.NumeroSolicitud;
                    break;
                }
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return Resultado;
        }

        #endregion

        #region ITarifarioBL Members


        public List<TarifarioBE> ObternerTarifariosXEstado(TarifarioBE request, DateTime dtFecha_Inicio, DateTime dtFecha_Fin)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<TarifarioBE> lstReturn = new List<TarifarioBE>();
            try
            {
                lstReturn = TarifarioDL.ObtenerSolicitudTarifariosXEstado(request, dtFecha_Inicio, dtFecha_Fin);
                foreach (TarifarioBE item in lstReturn)
                {
                    if (item.Fecha != null)
                        item.FechaVista = item.Fecha.ToString("dd/MM/yyyy").Substring(0, 10);
                }

            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return lstReturn;
        }

        #endregion

        #region ITarifarioBL Members


        public int ActualizarEstadoTarifario(TarifarioBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            int result=0;
            List<TarifarioBE> lstReturn = new List<TarifarioBE>();
            try
            {
                lstReturn = TarifarioDL.ActualizarEstadoTarifario(request);
                foreach (TarifarioBE item in lstReturn)
                {
                    result = item.NumeroSolicitud;
                }
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
            return result;
        }

        public void AnularTarifario(TarifarioBE request) {
           
          
            try
            {
                TarifarioDL.AnularTarifario(request);
            
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
            }
           
        
        
        }


        #endregion
    }
}
